{ "cells": [ { "cell_type": "markdown", "id": "1392ebd7", "metadata": {}, "source": [ " \n", "\n", "# IBM Q Backends and Quantum Superdense Coding\n", "\n", " " ] }, { "cell_type": "markdown", "id": "0663b4b4", "metadata": {}, "source": [ "## Contents\n", "\n", " \n", "\n", "1. [Working with the IBMQ backends](#ibmq)\n", " \n", " 1.1 [Experimental properties](#exp)\n", " \n", " 1.2 [Interactive tools](#ipywid)\n", " \n", " 1.3 [Quantum half-adder, revisited](#qha)\n", " \n", " \n", "2. [Superdense coding](#superdense)\n", "\n", " " ] }, { "cell_type": "markdown", "id": "64210c1c", "metadata": {}, "source": [ "# 1. Working with the IBMQ backends\n", "\n", " \n", "\n", "#### Loading the IBMQ account\n", "\n", "\n", "The `IBMQ` module of Qiskit provides the framework to work with the free-access quantum devices that are currently available.\n", "\n", "
\n", " \n", "**Managing your [access](https://quantum-computing.ibm.com/docs/manage/account/ibmq) token**\n", "\n", " \n", "\n", "\n", "Before working with the backends for the first time, a `TOKEN` from an [IBM Quantum Experience](https://quantum-computing.ibm.com/) account is necessary. After creating and logging into an account, the token string can be copied from:\n", "\n", " \n", "\n", "

https://quantum-computing.ibm.com/account

\n", "\n", " \n", "\n", "This string is used as a personal credential for handling communication with the quantum processors. There are several commands to manage credentials:\n", "\n", "- `enable_account('TOKEN')`: Enable account in the current session.\n", "- `save_account('TOKEN')`: Save account to disk for future use.\n", "- `load_account()`: Load account using stored credentials.\n", "- `disable_account()`: Disable account in the current session.\n", "- `stored_account()`: List the account stored to disk.\n", "- `active_account()`: List the account currently in the session.\n", "- `delete_account()`: Delete the saved account from disk.\n", "\n", "
\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "f5f584d9", "metadata": {}, "outputs": [], "source": [ "from qiskit import (QuantumCircuit, ClassicalRegister, QuantumRegister, \n", " IBMQ, Aer, execute, transpile)\n", "\n", "from qiskit.tools.visualization import plot_histogram, plot_circuit_layout, plot_gate_map\n", "\n", "from qiskit.providers.ibmq import least_busy\n", "\n", "from math import pi\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "id": "c0a311b3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Replace TOKEN with your string\n", "\n", "#IBMQ.save_account('TOKEN')\n", "\n", "# In subsequent sessios the Token can be loaded from disk\n", "\n", "IBMQ.load_account()" ] }, { "cell_type": "code", "execution_count": 4, "id": "a77ebe56", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "provider = IBMQ.get_provider(hub='ibm-q')\n", "provider.backends()" ] }, { "cell_type": "code", "execution_count": 4, "id": "77baa546", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ibmq_quito\n" ] } ], "source": [ "# Use least_busy() to find out which quantum device is the least busy\n", "\n", "physical_devices = provider.backends(simulator=False, operational=True, open_pulse=False)\n", "\n", "backend = least_busy(physical_devices)\n", "\n", "# Alternative: get backend directly by name\n", "\n", "#backend = provider.get_backend('ibmq_XXXXXXX')\n", "\n", "print(backend)" ] }, { "cell_type": "markdown", "id": "7302c5f4", "metadata": {}, "source": [ "## 1.1 Quantum devices - experimental properties\n", "\n", "#### [Basis Gates](https://qiskit.org/documentation/apidoc/transpiler.html)\n", "\n", "Although IBM's interface allows the user to program a quantum algorithm using a broad set of single and multi-qubit gates, these are compiled into a smaller set of compiler instruction:" ] }, { "cell_type": "code", "execution_count": 5, "id": "0616a3d3", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "['id', 'rz', 'sx', 'x', 'cx', 'reset']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backend.configuration().basis_gates" ] }, { "cell_type": "markdown", "id": "b161c1a2", "metadata": {}, "source": [ "#### [Qubit map](https://qiskit.org/documentation/apidoc/transpiler.html)\n", "\n", "Besides the restriction regarding the available gates, there are further physical constraints given by the physical architecture of the chip. In fact, CNOT gates can be directly applied only to qubits that are connected." ] }, { "cell_type": "code", "execution_count": 6, "id": "a069f61b", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_gate_map(backend)" ] }, { "cell_type": "markdown", "id": "865347a3", "metadata": {}, "source": [ "There are ways to circumvent the chip's architecture limitations (for example, by using SWAP operations to allow for a CNOT gate between otherwise physically uncoupled qubits). \n", "\n", "The study and development of efficient mapping algorithms between logical (software) and physical qubits, for a given quantum program, has only recently started receiving serious attention from the quantum information community. **As the size and complexity of quantum processor chips increase, efficient mapping algorithms will become crucial to successful demonstrations of the applications of quantum computers.**\n", "\n", "\n", "\n", "\n", "#### Coherence times\n", "\n", "Current quantum computations are 'fragile'. A physical qubit does not hold its state indefinitely but undergoes random bit-flips and loses its phase over time, i.e. some interactions introduce *noise*. IBM Q has two timescales arising from relaxation and decoherence ($T_1$ and $T_2$\n", "respectively), which limits the number of quantum operations performed before the results are 'drowned' by noise.\n", "\n", "$T_1$ or *amplitude damping time* is the time scale over which the state of a qubit damps to state $|1\\rangle$. \n", "On the other hand, $T_2$, the *phase damping* relates to decoherence. Decoherence is the loss of quantum 'properties' of a quantum system. In other words, a classical mixture can express a state that undergoes decoherence. " ] }, { "cell_type": "markdown", "id": "147a10d3", "metadata": {}, "source": [ "
\n", " \n", "**How are coherence times determined experimentally?**\n", "\n", " \n", "\n", "One way to estimate $T_1$ is to initialize a qubit to the ground state $| 0 \\rangle$ (for example, apply an $X$ gate to turn it into $| 1 \\rangle$, and measure it in the computational basis after a time $t$. \n", "\n", "The probability of the qubit staying in the $| 1 \\rangle$ state is expected to follow an exponential decay curve $e^{-t/T_1}$. \n", "\n", "To experimentally determine $T_2$, one can initialise a qubit to the ground state $| 0 \\rangle$, apply an Hadamard transform $H$ to change it into $\\frac{| 0 \\rangle + | 1 \\rangle}{\\sqrt{2}}$ and wait for a time $t$ before applying another transform $H$ and measuring the qubit on the computational basis.\n", "\n", "You can try [Relaxation and Decoherence](https://github.com/CQCL/qiskit-tutorial/blob/a2c8410ba62450d5f09d937bfbcda1497d9e5461/qiskit/ignis/relaxation_and_decoherence.ipynb).\n", " \n", "**Note** T1 and T2 are not \"time from state x to state y\" but rather decay constants.\n", " \n", "
\n", "\n", " \n", "\n", "Information on a given `backend`, such as qubit configuration or noise properties, can be retrieved by calling on the instance \n", "properties." ] }, { "cell_type": "code", "execution_count": 7, "id": "d85c1aa5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<qiskit.providers.models.backendstatus.BackendStatus object at 0x00000179101164C0>
name: ibmq_quito
version: 1.1.34, pending jobs: 10
status: active
" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check backend status\n", "backend.status()" ] }, { "cell_type": "code", "execution_count": 8, "id": "188be3aa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'backend_name': 'ibmq_quito',\n", " 'backend_version': '1.1.34',\n", " 'n_qubits': 5,\n", " 'basis_gates': ['id', 'rz', 'sx', 'x', 'cx', 'reset'],\n", " 'gates': [{'name': 'id',\n", " 'parameters': [],\n", " 'qasm_def': 'gate id q { U(0, 0, 0) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'rz',\n", " 'parameters': ['theta'],\n", " 'qasm_def': 'gate rz(theta) q { U(0, 0, theta) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'sx',\n", " 'parameters': [],\n", " 'qasm_def': 'gate sx q { U(pi/2, 3*pi/2, pi/2) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'x',\n", " 'parameters': [],\n", " 'qasm_def': 'gate x q { U(pi, 0, pi) q; }',\n", " 'coupling_map': [[0], [1], [2], [3], [4]]},\n", " {'name': 'cx',\n", " 'parameters': [],\n", " 'qasm_def': 'gate cx q0, q1 { CX q0, q1; }',\n", " 'coupling_map': [[0, 1],\n", " [1, 0],\n", " [1, 2],\n", " [1, 3],\n", " [2, 1],\n", " [3, 1],\n", " [3, 4],\n", " [4, 3]]},\n", " {'name': 'reset', 'parameters': None, 'qasm_def': None}],\n", " 'local': False,\n", " 'simulator': False,\n", " 'conditional': False,\n", " 'open_pulse': False,\n", " 'memory': True,\n", " 'max_shots': 20000,\n", " 'coupling_map': [[0, 1],\n", " [1, 0],\n", " [1, 2],\n", " [1, 3],\n", " [2, 1],\n", " [3, 1],\n", " [3, 4],\n", " [4, 3]],\n", " 'dynamic_reprate_enabled': True,\n", " 'supported_instructions': ['delay',\n", " 'u3',\n", " 'x',\n", " 'measure',\n", " 'id',\n", " 'reset',\n", " 'rz',\n", " 'shiftf',\n", " 'sx',\n", " 'play',\n", " 'u2',\n", " 'u1',\n", " 'setf',\n", " 'cx',\n", " 'acquire'],\n", " 'rep_delay_range': [0.0, 500.0],\n", " 'default_rep_delay': 250.0,\n", " 'max_experiments': 100,\n", " 'sample_name': 'family: Falcon, revision: 4, segment: T',\n", " 'n_registers': 1,\n", " 'credits_required': True,\n", " 'online_date': datetime.datetime(2021, 1, 8, 5, 0, tzinfo=tzutc()),\n", " 'description': '5 qubit device Quito',\n", " 'dt': 0.2222222222222222,\n", " 'dtm': 0.2222222222222222,\n", " 'processor_type': {'family': 'Falcon', 'revision': 4, 'segment': 'T'},\n", " 'parametric_pulses': ['gaussian', 'gaussian_square', 'drag', 'constant'],\n", " 'allow_q_object': True,\n", " 'clops': 2506,\n", " 'measure_esp_enabled': False,\n", " 'multi_meas_enabled': True,\n", " 'parallel_compilation': False,\n", " 'quantum_volume': 16,\n", " 'qubit_channel_mapping': [['d0', 'u1', 'u0', 'm0'],\n", " ['u3', 'u0', 'u5', 'm1', 'u2', 'u1', 'u4', 'd1'],\n", " ['u4', 'm2', 'd2', 'u2'],\n", " ['u3', 'u7', 'u5', 'd3', 'u6', 'm3'],\n", " ['u6', 'u7', 'd4', 'm4']],\n", " 'supported_features': ['qobj'],\n", " 'timing_constraints': {'acquire_alignment': 16,\n", " 'granularity': 16,\n", " 'min_length': 64,\n", " 'pulse_alignment': 1},\n", " 'uchannels_enabled': True,\n", " 'url': 'None',\n", " 'input_allowed': ['job', 'runtime'],\n", " 'allow_object_storage': True,\n", " 'pulse_num_channels': 9,\n", " 'pulse_num_qubits': 3,\n", " 'live_data': False,\n", " 'n_uchannels': 8,\n", " 'u_channel_lo': [[{'q': 1, 'scale': (1+0j)}],\n", " [{'q': 0, 'scale': (1+0j)}],\n", " [{'q': 2, 'scale': (1+0j)}],\n", " [{'q': 3, 'scale': (1+0j)}],\n", " [{'q': 1, 'scale': (1+0j)}],\n", " [{'q': 1, 'scale': (1+0j)}],\n", " [{'q': 4, 'scale': (1+0j)}],\n", " [{'q': 3, 'scale': (1+0j)}]],\n", " 'meas_levels': [1, 2],\n", " 'qubit_lo_range': [[4.800542324836402, 5.800542324836402],\n", " [4.5805801679999245, 5.580580167999925],\n", " [4.822190847494214, 5.822190847494214],\n", " [4.663613762117622, 5.663613762117622],\n", " [4.552327711581457, 5.552327711581457]],\n", " 'meas_lo_range': [[6.807868157000001, 7.807868157000001],\n", " [6.7292695270000005, 7.7292695270000005],\n", " [6.991060108, 7.991060108],\n", " [6.8547510460000005, 7.8547510460000005],\n", " [6.904365522000001, 7.904365522000001]],\n", " 'meas_kernels': ['hw_boxcar'],\n", " 'discriminators': ['linear_discriminator',\n", " 'hw_centroid',\n", " 'quadratic_discriminator'],\n", " 'rep_times': [1000.0],\n", " 'meas_map': [[0, 1, 2, 3, 4]],\n", " 'acquisition_latency': [],\n", " 'conditional_latency': [],\n", " 'hamiltonian': {'description': 'Qubits are modeled as Duffing oscillators. In this case, the system includes higher energy states, i.e. not just |0> and |1>. The Pauli operators are generalized via the following set of transformations:\\n\\n$(\\\\mathbb{I}-\\\\sigma_{i}^z)/2 \\\\rightarrow O_i \\\\equiv b^\\\\dagger_{i} b_{i}$,\\n\\n$\\\\sigma_{+} \\\\rightarrow b^\\\\dagger$,\\n\\n$\\\\sigma_{-} \\\\rightarrow b$,\\n\\n$\\\\sigma_{i}^X \\\\rightarrow b^\\\\dagger_{i} + b_{i}$.\\n\\nQubits are coupled through resonator buses. The provided Hamiltonian has been projected into the zero excitation subspace of the resonator buses leading to an effective qubit-qubit flip-flop interaction. The qubit resonance frequencies in the Hamiltonian are the cavity dressed frequencies and not exactly what is returned by the backend defaults, which also includes the dressing due to the qubit-qubit interactions.\\n\\nQuantities are returned in angular frequencies, with units 2*pi*GHz.\\n\\nWARNING: Currently not all system Hamiltonian information is available to the public, missing values have been replaced with 0.\\n',\n", " 'h_latex': '\\\\begin{align} \\\\mathcal{H}/\\\\hbar = & \\\\sum_{i=0}^{4}\\\\left(\\\\frac{\\\\omega_{q,i}}{2}(\\\\mathbb{I}-\\\\sigma_i^{z})+\\\\frac{\\\\Delta_{i}}{2}(O_i^2-O_i)+\\\\Omega_{d,i}D_i(t)\\\\sigma_i^{X}\\\\right) \\\\\\\\ & + J_{0,1}(\\\\sigma_{0}^{+}\\\\sigma_{1}^{-}+\\\\sigma_{0}^{-}\\\\sigma_{1}^{+}) + J_{1,2}(\\\\sigma_{1}^{+}\\\\sigma_{2}^{-}+\\\\sigma_{1}^{-}\\\\sigma_{2}^{+}) + J_{1,3}(\\\\sigma_{1}^{+}\\\\sigma_{3}^{-}+\\\\sigma_{1}^{-}\\\\sigma_{3}^{+}) + J_{3,4}(\\\\sigma_{3}^{+}\\\\sigma_{4}^{-}+\\\\sigma_{3}^{-}\\\\sigma_{4}^{+}) \\\\\\\\ & + \\\\Omega_{d,0}(U_{0}^{(0,1)}(t))\\\\sigma_{0}^{X} + \\\\Omega_{d,1}(U_{1}^{(1,0)}(t)+U_{3}^{(1,3)}(t)+U_{2}^{(1,2)}(t))\\\\sigma_{1}^{X} \\\\\\\\ & + \\\\Omega_{d,2}(U_{4}^{(2,1)}(t))\\\\sigma_{2}^{X} + \\\\Omega_{d,3}(U_{6}^{(3,4)}(t)+U_{5}^{(3,1)}(t))\\\\sigma_{3}^{X} \\\\\\\\ & + \\\\Omega_{d,4}(U_{7}^{(4,3)}(t))\\\\sigma_{4}^{X} \\\\\\\\ \\\\end{align}',\n", " 'h_str': ['_SUM[i,0,4,wq{i}/2*(I{i}-Z{i})]',\n", " '_SUM[i,0,4,delta{i}/2*O{i}*O{i}]',\n", " '_SUM[i,0,4,-delta{i}/2*O{i}]',\n", " '_SUM[i,0,4,omegad{i}*X{i}||D{i}]',\n", " 'jq0q1*Sp0*Sm1',\n", " 'jq0q1*Sm0*Sp1',\n", " 'jq1q2*Sp1*Sm2',\n", " 'jq1q2*Sm1*Sp2',\n", " 'jq1q3*Sp1*Sm3',\n", " 'jq1q3*Sm1*Sp3',\n", " 'jq3q4*Sp3*Sm4',\n", " 'jq3q4*Sm3*Sp4',\n", " 'omegad1*X0||U0',\n", " 'omegad0*X1||U1',\n", " 'omegad3*X1||U3',\n", " 'omegad2*X1||U2',\n", " 'omegad1*X2||U4',\n", " 'omegad4*X3||U6',\n", " 'omegad1*X3||U5',\n", " 'omegad3*X4||U7'],\n", " 'osc': {},\n", " 'qub': {'0': 3, '1': 3, '2': 3, '3': 3, '4': 3},\n", " 'vars': {'delta0': -2.0827513300148186,\n", " 'delta1': -2.0058778622715616,\n", " 'delta2': -2.0880065449040663,\n", " 'delta3': -2.1053738129998156,\n", " 'delta4': -2.005987719908062,\n", " 'jq0q1': 0.011708244917214646,\n", " 'jq1q2': 0.012036525934936945,\n", " 'jq1q3': 0.011454603594507373,\n", " 'jq3q4': 0.010153599217904038,\n", " 'omegad0': 1.0803551177224964,\n", " 'omegad1': 1.3099434612276029,\n", " 'omegad2': 1.017126739295568,\n", " 'omegad3': 1.0637955341141854,\n", " 'omegad4': 0.4594461477931912,\n", " 'wq0': 33.30428965549561,\n", " 'wq1': 31.922226663525127,\n", " 'wq2': 33.44031133498132,\n", " 'wq3': 32.443942122087755,\n", " 'wq4': 31.744711244464874}},\n", " 'channels': {'acquire0': {'operates': {'qubits': [0]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire1': {'operates': {'qubits': [1]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire2': {'operates': {'qubits': [2]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire3': {'operates': {'qubits': [3]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'acquire4': {'operates': {'qubits': [4]},\n", " 'purpose': 'acquire',\n", " 'type': 'acquire'},\n", " 'd0': {'operates': {'qubits': [0]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd1': {'operates': {'qubits': [1]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd2': {'operates': {'qubits': [2]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd3': {'operates': {'qubits': [3]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'd4': {'operates': {'qubits': [4]}, 'purpose': 'drive', 'type': 'drive'},\n", " 'm0': {'operates': {'qubits': [0]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm1': {'operates': {'qubits': [1]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm2': {'operates': {'qubits': [2]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm3': {'operates': {'qubits': [3]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'm4': {'operates': {'qubits': [4]}, 'purpose': 'measure', 'type': 'measure'},\n", " 'u0': {'operates': {'qubits': [0, 1]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u1': {'operates': {'qubits': [1, 0]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u2': {'operates': {'qubits': [1, 2]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u3': {'operates': {'qubits': [1, 3]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u4': {'operates': {'qubits': [2, 1]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u5': {'operates': {'qubits': [3, 1]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u6': {'operates': {'qubits': [3, 4]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'},\n", " 'u7': {'operates': {'qubits': [4, 3]},\n", " 'purpose': 'cross-resonance',\n", " 'type': 'control'}}}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check configuration\n", "config = backend.configuration()\n", "\n", "# to_dict() displays configuration in dict form - easier to read\n", "config.to_dict()" ] }, { "cell_type": "code", "execution_count": 9, "id": "e9428157", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'backend_name': 'ibmq_quito',\n", " 'backend_version': '1.1.34',\n", " 'last_update_date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'qubits': [[{'date': datetime.datetime(2022, 10, 10, 5, 12, 44, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 104.76186398436202},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 17, 6, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 168.8274987120798},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.300542324836402},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.3314801694030778},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.032299999999999995},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.04600000000000004},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0186},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2022, 10, 10, 4, 3, 51, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 140.79761070233786},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 21, 12, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 125.6987135998919},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.080580167999925},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.3192453770191231},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.048799999999999955},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.06920000000000004},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0284},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2022, 10, 10, 5, 12, 44, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 59.976737174119855},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 17, 6, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 52.96074681465236},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.322190847494214},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.33231656282971167},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.07840000000000003},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.09219999999999995},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0646},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2022, 10, 10, 5, 12, 44, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 87.15438279499065},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 17, 6, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 20.47999565278833},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.163613762117622},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.33508064939515236},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.034399999999999986},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.05179999999999996},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.017},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}],\n", " [{'date': datetime.datetime(2022, 10, 10, 5, 12, 44, tzinfo=tzlocal()),\n", " 'name': 'T1',\n", " 'unit': 'us',\n", " 'value': 57.88670671883064},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 21, 12, tzinfo=tzlocal()),\n", " 'name': 'T2',\n", " 'unit': 'us',\n", " 'value': 94.2014293401153},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'frequency',\n", " 'unit': 'GHz',\n", " 'value': 5.052327711581457},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'anharmonicity',\n", " 'unit': 'GHz',\n", " 'value': -0.3192628614050085},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_error',\n", " 'unit': '',\n", " 'value': 0.03510000000000002},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas0_prep1',\n", " 'unit': '',\n", " 'value': 0.0484},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'prob_meas1_prep0',\n", " 'unit': '',\n", " 'value': 0.0218},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 8, 1, tzinfo=tzlocal()),\n", " 'name': 'readout_length',\n", " 'unit': 'ns',\n", " 'value': 5351.11111111111}]],\n", " 'gates': [{'qubits': [0],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00025997053155203534},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id0'},\n", " {'qubits': [1],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003195457453385672},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id1'},\n", " {'qubits': [2],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00032467935212082395},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id2'},\n", " {'qubits': [3],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003121243328976491},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id3'},\n", " {'qubits': [4],\n", " 'gate': 'id',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003619945274938311},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'id4'},\n", " {'qubits': [0],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz0'},\n", " {'qubits': [1],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz1'},\n", " {'qubits': [2],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz2'},\n", " {'qubits': [3],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz3'},\n", " {'qubits': [4],\n", " 'gate': 'rz',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 0}],\n", " 'name': 'rz4'},\n", " {'qubits': [0],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00025997053155203534},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx0'},\n", " {'qubits': [1],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003195457453385672},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx1'},\n", " {'qubits': [2],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00032467935212082395},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx2'},\n", " {'qubits': [3],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003121243328976491},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx3'},\n", " {'qubits': [4],\n", " 'gate': 'sx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003619945274938311},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'sx4'},\n", " {'qubits': [0],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00025997053155203534},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x0'},\n", " {'qubits': [1],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003195457453385672},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x1'},\n", " {'qubits': [2],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.00032467935212082395},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x2'},\n", " {'qubits': [3],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003121243328976491},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x3'},\n", " {'qubits': [4],\n", " 'gate': 'x',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 25, 49, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0003619945274938311},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 35.55555555555556}],\n", " 'name': 'x4'},\n", " {'qubits': [3, 4],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 6, 21, 28, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.01827044302059122},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 277.3333333333333}],\n", " 'name': 'cx3_4'},\n", " {'qubits': [4, 3],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 6, 21, 28, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.01827044302059122},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 312.88888888888886}],\n", " 'name': 'cx4_3'},\n", " {'qubits': [1, 3],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 6, 10, 48, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.009061873917182522},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 334.22222222222223}],\n", " 'name': 'cx1_3'},\n", " {'qubits': [3, 1],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 6, 10, 48, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.009061873917182522},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 369.77777777777777}],\n", " 'name': 'cx3_1'},\n", " {'qubits': [2, 1],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 6, 2, 12, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.007725540306385004},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 263.1111111111111}],\n", " 'name': 'cx2_1'},\n", " {'qubits': [1, 2],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 6, 2, 12, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.007725540306385004},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 298.66666666666663}],\n", " 'name': 'cx1_2'},\n", " {'qubits': [0, 1],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 5, 51, 19, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0069973003665530775},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 234.66666666666666}],\n", " 'name': 'cx0_1'},\n", " {'qubits': [1, 0],\n", " 'gate': 'cx',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 9, 5, 51, 19, tzinfo=tzlocal()),\n", " 'name': 'gate_error',\n", " 'unit': '',\n", " 'value': 0.0069973003665530775},\n", " {'date': datetime.datetime(2022, 10, 7, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 270.22222222222223}],\n", " 'name': 'cx1_0'},\n", " {'qubits': [0],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 5920}],\n", " 'name': 'reset0'},\n", " {'qubits': [1],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 5920}],\n", " 'name': 'reset1'},\n", " {'qubits': [2],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 5920}],\n", " 'name': 'reset2'},\n", " {'qubits': [3],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 5920}],\n", " 'name': 'reset3'},\n", " {'qubits': [4],\n", " 'gate': 'reset',\n", " 'parameters': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'gate_length',\n", " 'unit': 'ns',\n", " 'value': 5920}],\n", " 'name': 'reset4'}],\n", " 'general': [{'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'jq_01',\n", " 'unit': 'GHz',\n", " 'value': 0.00186342505350527},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'zz_01',\n", " 'unit': 'GHz',\n", " 'value': -7.496747784218088e-05},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'jq_12',\n", " 'unit': 'GHz',\n", " 'value': 0.001915672600199012},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'zz_12',\n", " 'unit': 'GHz',\n", " 'value': -9.390005618575403e-05},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'jq_13',\n", " 'unit': 'GHz',\n", " 'value': 0.0018230567832240405},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'zz_13',\n", " 'unit': 'GHz',\n", " 'value': -4.288984169653279e-05},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'jq_34',\n", " 'unit': 'GHz',\n", " 'value': 0.0016159955057034297},\n", " {'date': datetime.datetime(2022, 10, 10, 5, 30, 44, tzinfo=tzlocal()),\n", " 'name': 'zz_34',\n", " 'unit': 'GHz',\n", " 'value': -3.547813333704521e-05}]}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "properties = backend.properties()\n", "\n", "properties.to_dict()" ] }, { "cell_type": "markdown", "id": "31365a12", "metadata": {}, "source": [ " \n", "\n", "\n", "## 1.2 Interactive tools \n", "\n", "The large amount of information on different backends can better be visualized using the integrated interactive tools." ] }, { "cell_type": "code", "execution_count": 10, "id": "514cb353", "metadata": {}, "outputs": [], "source": [ "# NOTE: if interactive tools don't work,\n", "# you may need to install ipywidgets.\n", "# If so, execute the line below:\n", "\n", "# !pip install ipywidgets\n", "\n", "# Interactive tools\n", "import qiskit.tools.jupyter\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 11, "id": "72639545", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

Qiskit SoftwareVersion
qiskit-terra0.21.2
qiskit-aer0.11.0
qiskit-ignis0.7.1
qiskit-ibmq-provider0.19.2
qiskit0.38.0
qiskit-nature0.1.1
qiskit-optimization0.1.0
System information
Python version3.9.4
Python compilerMSC v.1916 64 bit (AMD64)
Python builddefault, Apr 9 2021 11:43:21
OSWindows
CPUs4
Memory (Gb)15.885398864746094
Mon Oct 10 11:55:49 2022 Hora de Verão de GMT
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%qiskit_version_table" ] }, { "cell_type": "markdown", "id": "2db3088d", "metadata": {}, "source": [ "
\n", " \n", "On which computer should you run your experiments today?\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 12, "id": "e6330f8b", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ba35b3c7816e4347901ce52832da0e91", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(HTML(value=\"

" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "backend" ] }, { "cell_type": "markdown", "id": "f3cebc90", "metadata": {}, "source": [ " \n", "\n", "\n", "## 1.3 Quantum half-adder, revisited \n", "\n", " \n", "\n", "\n", "Recall the quantum half-adder circuit from the previous class, which adds the states of $q_0$ and $q_1$, and outputs the *sum* S to $q_1$ and the *carry* C to an additional qubit $q_2$:\n", "\n", " \n", "\n", "| $q_0$ (input) = A | $q_1$ (input) = B | $q_1$ (output) = S | $q_2$ (output) = C |\n", "|-----------------|-----------------|-------------------|------------------|\n", "| 0 | 0 | 0 | 0 |\n", "| 1 | 0 | 1 | 0 |\n", "| 0 | 1 | 1 | 0 |\n", "| 1 | 1 | 0 | 1 |\n", "\n", "\n", " \n", "\n", "\n", "We can now compare the results of the quantum half adder under ideal conditions (when using the simulator) and when executed on a physical quantum processor." ] }, { "cell_type": "code", "execution_count": 5, "id": "fee16794", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create registers\n", "qr = QuantumRegister(3)\n", "cr = ClassicalRegister(3)\n", "\n", "# Quantum Circuit\n", "half_adder = QuantumCircuit(qr, cr)\n", "\n", "# We are adding q0 = |1> and q1 = |1>\n", "half_adder.x(qr[0])\n", "half_adder.x(qr[1])\n", "\n", "# Perform operation for quantum half-adder\n", "\n", "half_adder.ccx(qr[0],qr[1], qr[2])\n", "half_adder.cx(qr[0], qr[1])\n", "\n", "# Barriers make circuits prettier\n", "half_adder.barrier()\n", "\n", "# Measure\n", "half_adder.measure(qr, cr)\n", "\n", "# Draw\n", "half_adder.draw(output='mpl')" ] }, { "cell_type": "markdown", "id": "881610e1", "metadata": {}, "source": [ "Recall that under noiseless settings and deterministic inputs (since inputs are not in superposition), the output is deterministic: $q_0 = 1$, $q_1 = 0$ (sum) and $q_2 = 1$ (carry). \n", "\n", "
\n", "What is the expected outcome?\n", "
" ] }, { "cell_type": "code", "execution_count": 16, "id": "76296c0d", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sim_backend = Aer.get_backend(\"qasm_simulator\")\n", "\n", "shots = 1024\n", "\n", "# Execute the circuit:\n", "\n", "job_half_adder_s = execute(half_adder,sim_backend,shots=shots) \n", "\n", "result_half_adder_s = job_half_adder_s.result()\n", "counts_half_adder_sim = result_half_adder_s.get_counts()\n", "\n", "# plot histogram:\n", "\n", "plot_histogram(counts_half_adder_sim)\n" ] }, { "cell_type": "markdown", "id": "e35b8675", "metadata": {}, "source": [ "#### Visualizing circuit decompositions\n", "\n", "Before being executed on a physical backend, the circuit is decomposed. This decomposition can be visualized using the `transpile` function." ] }, { "cell_type": "code", "execution_count": 19, "id": "84512822", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKsAAAE7CAYAAAASIAJsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAABuFUlEQVR4nO3dd3xT9f7H8Vc6ocyWsvceZZS9aREQ0J+CCDhQEUEQ4V63cK8K14XigusAcV3udYBsEJkiLcgSCkXLhgJlrxbKhrb5/XFsoXQlJclJ0vfz8eiD9OTk5M23yUnyyXdYrFarFRERERERERERETfgY3YAERERERERERGRdCpWiYiIiIiIiIiI21CxSkRERERERERE3IaKVSIiIiIiIiIi4jZUrBIREREREREREbehYpWIiIiIiIiIiLgNFatERERERERERMRtqFglIiIiIiIiIiJuw6Zi1YkTJ3j44YepUaMGzZs3p23btsydOxeAokWL5nrbAwcO0LBhQ7uD5XRcX19fwsPDadiwIf369ePSpUv5vg9HqFatGo0aNSI8PJwWLVrYdJunnnqKNWvWMGHCBMLCwmjYsCEPPfQQV65ccXJaERERERERERH3lmexymq10rt3bzp16kR8fDwxMTFMnz6dw4cPuyJfFoULFyY2Npa4uDgCAgL4/PPPTclxs5UrVxIbG8umTZts2n/9+vVUq1aNjz/+mE2bNhEXF0dqairTp093clIREREREREREfeWZ7Hq119/JSAggKeeeipjW9WqVfnb3/6WZd+PPvqIhg0b0rBhQyZOnJixPSUlhQEDBlC/fn369u3LpUuXAOjduzfNmzcnLCyML774wu7wHTt2ZO/evQCkpqby5JNPEhYWxp133snly5dzvI+LFy9y991306RJExo2bMiPP/4IwHfffUerVq0IDw9n2LBhpKam2p0JYN++fZQuXZpq1aoRHh5OSEgINWvWJDk5mR07dlCnTp2Mdrl8+TIpKSlcunSJChUq5Ov+RERERERERES8RZ7Fqm3bttGsWbM8DxQTE8N//vMfNmzYwPr16/nyyy/ZsmULALt27eLpp59mx44dFC9enEmTJgHwzTffEBMTw6ZNm/j44485c+aMzcFTUlJYvHgxjRo1AmDPnj2MGDGCbdu2UbJkSWbPnp3jfSxZsoQKFSqwdetW4uLi6NGjBzt2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TJs2zeaVAEVEREREREREJHsqVuVTjRo1WLVqldkxRERERERERES8io/ZAURERERERETEeSIjI82OIGIXFatEREREREREvNjkyZPNjiBiFxWrRERERERERLzY8OHDzY4gYhcVq0RERERERES8WFRUlNkRROyiYpWIiIiIiIiIiLgNFatERERERERERMRtqFglIiIiIiIi4sV27NhhdgQRu6hYJSIiIiIiIuLFZsyYYXYEEbuoWCUiIiIiIiLixcaOHWt2BBG7qFglIiIiIiIiIiJuQ8UqERERERERERFxGypWiYiIiIiIiHixSZMmmR1BxC4qVomIiIiIiIh4sbCwMLMjiNhFxSoRERERERERLxYREWF2BBG7qFglIiIiIiIiIiJuQ8UqERERERERES/WsmVLsyOI2EXFKhEREREREREvtnHjRrMjiNhFxSoREREREREREXEbKlaJiIiIiIiIiIjbULFKRERERERExIvNmjXL7AgidlGxSkRERERERERE3IaKVSIiIiIiIiJerG/fvmZHELGLilUiIiIiIiIiIuI2VKwSERERERERERG3oWKViIiIiIiIiBcbMWKE2RFE7KJilYiIiIiIiIgXGzlypNkRROyiYpWIiIiIiIiIF+vUqZPZEUTsomKViIiIiIiIiBc7deqU2RFE7KJilYiIiIiIiIiIuA0Vq0RERERERES8WIMGDcyOIGIXFatEREREREREvNjs2bPNjiBiF68vVsXFxWGxWFi0aBEA+/fvx2KxMGPGjIx9stvmDZ544gksFgt9+/Y1O4qIiIiIiIiYZMyYMWZHELGL1xerypcvz7p16+jatSsAMTExALRo0SJjn+y2eboVK1YwY8YMihcvbnYUERERERERMdHMmTPNjiBiF68vVpUqVYo2bdoQEBAAGIWp4OBgatSokbFPdts82eXLlxk2bBhjxowhODjY7DgiIiIiIiIiIjZzabEqKiqK3r17U7lyZQoVKkTFihUZMmQI586dy9inRYsWPPTQQ8yePZvWrVsTFBRE9erV+fHHH7M95oIFC+jatSslS5YkKCiIRo0a8c0332Rc37p1a/r165fxe0xMDM2aNct0jFu32ZIzv5KSkujRowd//PFHttdbrVbGjh3LkSNH8n0fY8aMoUiRIjz//PP5PoaIiIiIiIiIiBlcWqzaunUrHTp04PPPP2fZsmWMGTOG+fPn88ILLwCQkpJCXFwcGzZs4JNPPuHFF19k7ty5lClThscff5zk5ORMx3vttdcyikrffPMNs2fP5t577yUxMRGA1NRU/vzzz0yFqJiYmCzD/W7dllfO23H16lWWLl2akfFWSUlJzJo1i4iICA4dOmT38WNiYvj3v//NlClT8PPzu924IiIiIiIi4uGio6PNjiBiF5dWM5555pmMy2lpabRr146tW7eyYsUKALZv387Vq1epXbs2ixcvxsfHqKVdvXqVXr16cfDgQRo1agTAnDlzeOutt5g6dSoDBw7MOG7Pnj0zLu/cuZPLly/TtGlTAA4cOEBiYiLNmzfP2Ce7bXnldIRr165x5cqVLNuDgoJYsmQJ3bt3JyIigl9//ZVq1arZdMyUlBSGDBnCkCFDaNOmjcOyioiIiIiIiOfatm0bZcqUMTuGiM1cVqxKTU1l+vTpTJ48mT179nDy5MmM69J7Pm3ZsgWAN954I6NQBWT0QqpQoULGttdee43OnTtnKlTdavPmzQAZxar0idRvLkzdus2WnGAMtZs+fTp79+5lxowZdq+41717d5v2GzhwoM1V8A8++IATJ07wzjvv2JXlZhaLJd+3FREREREREdd67rnn8txnwoQJue43YcIER0bKt1HvTgGMz6U3X3Z3npjbjMxWq9XmfV1WrBo4cCBz5sxh5MiRjBo1itDQUPz8/OjSpUtGb6ktW7YQHBxM69atM902NjaWSpUqUapUKQASEhLYvn17ph5Q2dmyZQsVKlSgbNmygFGYCgkJyTK5+s3bbMkJ0KNHDx5//HGeeOKJfLXHuHHjMh3vZmlpaYwePZp9+/bx0ksv2XS8hIQEXn/9dT7++GOsVitnz57NONb169c5e/YsRYoUwd/fP195RURERERERERcwSXFqri4OL7//nu++uorBg8enLF9zZo1nD9/PqNX05YtWzL1ekp36wToR48eBaBixYq53u+WLVsyelVld5xbt9maE6Bdu3Z5/r9z07ZtWyIjI7NsT01NZdCgQcTHxzNv3rxMwxpzEx8fz5UrVxg6dChDhw7NdN2hQ4cIDg7m22+/5ZFHHsn1OPZUOkVERERERMRcO3fuzHOfCRMmZPmceLOPPvrIkZHybfT4LwDjc+nNl92dJ+Z298wumWA9ISEBgHr16mVsu379esZqdc2bN8dqtRIbG5ulWJWWlkZsbGymolP6cMC4uLhc7/fW28XExGQ5/s3bbMnpbMnJyezatYv58+fbXKgCCA8PZ+XKlVl+ypYtS6dOnVi5ciXdunVzYnIRERERERFxR6+//rrZEUTs4pKeVU2aNKFQoUKMHj2a1157jTNnzvDRRx+RlJSEr68v4eHhxMfHk5ycnGWlvt27d3PhwoVMPaKqVKlC586defvtt/H19aV58+YkJiayfPlyBgwYQMeOHYmPj+fs2bMZtzt48CBnzpzJdPxbt9mS83aVK1cu12plcHAw69evt3usaMmSJbPtqVWoUCFKly6d7XUiIiIiIiLi/fr37292BBG7uKRYVbFiRX744QdefvllevXqRVhYGC+//DILFy4kMDCQoKCgjMnVs+v5BGQZvjdjxgzGjBnDp59+yrFjxyhVqhTt27enQYMGwI3J2u2ZXN2WnK7g7hOxiYiIiIiIiOeoX78+O3bsMDuGiM1cNsH6fffdx3333Zdp283V3b59+2bb42jAgAEMGDAgy/bQ0FAmTZqU4/3df//9mY7Xp0+fLMfPblteOT3NgQMHzI4gIiIiIiIiImIzl8xZ5Y1ee+01KlWqxLp16xg2bBiVKlVi3759ZscSEREREREREfFoKlbl05tvvsnhw4e5evUqZ86c4fDhw9SsWdPsWCIiIiIiIiKZaA5j8TQqVomIiIiIiIh4scmTJ5sdQcQuKlaJiIiIiIiIeLHhw4ebHUHELipWiYiIiIiIiHixqKgosyOI2EXFKhERERERERERcRsqVomIiIiIiIiIiNtQsUpERERERETEi+3YscPsCCJ2UbFKRERERERExIvNmDHD7AgidlGxSkRERERERMSLjR071uwIInZRsUpERERERERERNyGilUiIiIiIiIiIuI2VKwSERERERER8WKTJk0yO4KIXVSsEhEREREREfFiYWFhZkcQsYuKVSIiIiIiIiJeLCIiwuwIInZRsUpERERERERERNyGilUiIiIiIiIiIuI2/MwOICIiIiIiIiL5U69evTz3GTt2rE37ibgL9awSERERERER8WL/+te/zI4gYhcVq0RERERERERExG2oWCUiIiIiIiIiIm5DxSoREREREREREXEbKlaJiIiIiIiIiIjbULFKRERERERERETchopVIiIiIiIiIiLiNlSsErvceeedhIeH06hRI/r27UtycrLZkURERERERESIiooiLCyMWrVqMWTIEFJTU82OlKdnnnmGSpUq4efnZ3YUmx06dIguXbpQv359wsLC+Mc//uHw+1CxSuwyc+ZMYmNj+fPPP6lUqRIfffSR2ZFERERERESkgEtLS2PIkCHMnDmTvXv3kpyczHfffWd2rDz169ePTZs2mR3DLn5+fowfP54dO3awZcsWfvvtN+bPn+/Q+1CxSuxSokQJwDgRXLlyBYvFYnIiERERERERKeg2btxIhQoVaNCgAQCDBw9m9uzZJqfKW4cOHShXrpzZMexSvnx5WrRoAUBAQABNmzYlISHBofehYpXY7b777qNMmTLs2rWLF154wew4IiIiIiIiUsAdPnyYypUrZ/xepUoVDh06ZGKigiExMZF58+bRrVs3hx7XcwZFituYO3cu165dY/DgwcyaNYvHH3/c7EgiIiIiIiLigRatXM+eA0cybfv3f2Zne7lxvRp0bts02+NYrVbnBMzGsZNnmPFzVJbt2eUO8Pfjsfu7U6RwIVfFy5bVamXWomiOnjyTaXtObd2maQNah9fP9ZjXrl2jb9++PPPMM9SrV8+hedWzSvIlICCABx98kLlz55odRURERERERDxU++YNSTp3nmM3FVFuvXzs5BkuXrpC66YNcjxO5cqVM/WkSkhIoFKlSk7JXL5MKapUKJORLbfcTcNqm16oArBYLHRs1ZiTZ5LyzJyWlkazhrVzPV5qaioPP/ww4eHhThlxpWKV2Oz8+fMcO3YMMOasWrBgAWFhYSanEhEREREREU9VonhRet/ZIc/9+t0VQVChwByvb9GiBYcPH2b79u0AfP311/Tp08dhOW91V+c2lAounus+dWtUzrN3kiuVKx1C906tct3H18eH/v/XGf88ViccOnQoxYoV48MPP3RkxAwqVnmZo0eP8tBDDxEcHEzRokXp3r0727Ztc8ixz58/z7333kvjxo1p3LgxKSkpvPrqqw45toiIiIiIiBRMTerXpHG9Gjle3655GLWr595LytfXl6+++oq+fftSs2ZNihYtyqOPPuroqBkCA/x54O7OOS46FlQokPt7RuS5KNmwYcOoVKkSqampVKpUiREjRjgjboYOLRtRo0r5HK/v2qE5FcuG5nqMNWvW8M0337Bp0yaaNm1KeHg4H3/8sUNzWqyuHNgpTnX58mWaNm1KWloa48aNIygoiHHjxrFz505iY2Od1gUSjPGvWhlQRERERERE8uPS5StM/GYWyRcuZdpeOqQkf3u8DwH+7jnl9rJVG/l13ZYs2wf06kqjXApwZko6d56J38zi6rXrmbZXrViWYQ/fg4+P+f2azE8gDvPVV1+xe/du5s6dS9++fbnrrrv46aefSElJYdy4cU69759XrmfOklUundROREREREREvENQ4UL07RmRaZuPj4UH/q+z2xaqALq0z9oTqWlYbbctVAEElyjGvd3aZ9oW4O9H/7s7u0WhClSs8jh//vkn999/P6GhoRQqVIjatWvzyiuvADB//nyaNm2aaR6p4OBg7rnnHqdOhJ58/iLrN28nTb2rREREREREJJ/q1KhM22Y3JlHv0q45lcqXNjFR3nx9jTme/Px8AShRrAi9bikEuaNmYbUJq1Mt4/f/69Iuzzm4XEnFKg8SExNDmzZt2LZtG++//z6LFi1i9OjRHD9+HIC4uDgaNmyY5XYNGzbk+PHjnDlzJst1jhC1YStp1rQclxAVERERERERsUXPyDaEhpSgcvkyRLYNNzuOTcqGBtMjwpi4vN/dkRQKDDA5Ud4sFgt9uneiaJHC1K9VhZaN65odKRPNWeVBIiMj2b59O3v27KFEiRJZrg8ICODpp59m4sSJmbZ/+eWXDB06lN27d1O7du7LT44e/4UjI4uIiIiIiIiI8O6ooTbvq55VHuLSpUusXr2ahx56KNtClYiIiIiIiIiIN3DfWcokk6SkJNLS0nJd0S8kJISkpKQs2xMTEzOuz4s9lc7k8xd5b8p0wsNqZZkIT0REREREREQkP1Ss8hDBwcH4+Phw5MiRHPcJCwtj27ZtWbZv27aNcuXKUapUqTzvJz/DADf9sYtNf+yy+3YiIiIiIiIiUjBoGKAXCgoKolOnTkybNo3k5ORs9+nVqxebN29mx44dGdvOnj3LTz/9RO/evV2UVEREREREREQk/zTBugeJiYmhU6dOVK1alZdffpmqVauSkJDA6tWr+eqrr7h06RLh4eFYLBbGjRtHUFAQ48aNY/v27cTGxlK5cmWHZVnwy1rWb9nGC08+QKmS7rO8pYiIiIiIiIh4NvWs8iDNmzdn3bp11K5dm+eee4677rqLt99+mwoVKgBG76uVK1cSHh7O4MGD6du3L4ULFyYqKsqhhark8xf5PXYHzRrWUaFKRERERERERBxKPavEbvGHjjFj4UqefOj/VKwSEREREREREYdSsUryJS0tDR8fdcwTEREREREREcdSsUpERERERERERNyGusaIiIiIiIiIiIjbULFKRERERERERETchopVIiIiIiIiIiLiNlSsEhERERERERERt6FilYiIiIiIiIiIuA0Vq0RERERERERExG2oWCUiIiIiIiIiIm5DxSoREREREREREXEbKlaJiIiIiIiIiIjbULFKRERERERERETchopVIiIiIiIiIiLiNlSsEhERERERERERt6FilYiIiIiIiIiIuA0Vq0RERERERERExG2oWCUiIiIiIiIiIm5DxSoREREREREREXEbKlaJiIiIiIiIiIjbULFKRERERERERETchopVIiIiIiIiIiLiNlSsEhERERERERERt6FilYiIiIiIiIiIuA0Vq0RERERERERExG2oWCUiIiIiIiIiIm5DxSoREREREREREXEbKlaJiIiIiIiIiIjbULFKRERERERERETchopVIiIiIiIiIiLiNv4fTFc0HY2+ULYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# To visualize the decomposition, we have to specify the backend\n", "# get_backend() to define backend\n", "physical_backend = provider.get_backend('ibmq_belem')\n", "\n", " \n", "# With transpile we can see exactly what is running on the backend\n", "qc_real = transpile(half_adder, backend=physical_backend)\n", "\n", "qc_real.draw(output='mpl')" ] }, { "cell_type": "markdown", "id": "e821e431", "metadata": {}, "source": [ "#### Comparing the number of layers\n", "\n", "We can compare the number of *layers* between the original and the compiled circuit. \n", "\n", "A *layer* is comprised of all quantum operations that can be executed concurrently, before the quantum device executes the next cycle of operations.\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 17, "id": "22e6c526", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original circuit\n", "Depth: 4\n", "Gate counts: OrderedDict([('measure', 3), ('x', 2), ('ccx', 1), ('cx', 1), ('barrier', 1)])\n", "\n", "Optimization Level 0\n", "Depth: 21\n", "Gate counts: OrderedDict([('cx', 13), ('rz', 11), ('measure', 3), ('x', 2), ('sx', 2), ('barrier', 1)])\n", "\n", "Optimization Level 1\n", "Depth: 24\n", "Gate counts: OrderedDict([('cx', 17), ('rz', 10), ('measure', 3), ('sx', 2), ('x', 2), ('barrier', 1)])\n", "\n", "Optimization Level 2\n", "Depth: 22\n", "Gate counts: OrderedDict([('cx', 14), ('rz', 10), ('measure', 3), ('sx', 2), ('x', 2), ('barrier', 1)])\n", "\n", "Optimization Level 3\n", "Depth: 25\n", "Gate counts: OrderedDict([('rz', 18), ('sx', 11), ('cx', 6), ('x', 3), ('measure', 3), ('barrier', 1)])\n", "\n" ] } ], "source": [ "print('Original circuit')\n", "print('Depth:', half_adder.depth())\n", "print('Gate counts:', half_adder.count_ops())\n", "print()\n", "\n", "circlist=[]\n", "for kk in range(4):\n", " circ = transpile(half_adder, backend, optimization_level=kk)\n", " circlist.append(circ)\n", " print('Optimization Level {}'.format(kk))\n", " print('Depth:', circ.depth())\n", " print('Gate counts:', circ.count_ops())\n", " print()" ] }, { "cell_type": "markdown", "id": "a83db1b9", "metadata": {}, "source": [ "We can also visually see which qubits are used for the circuit." ] }, { "cell_type": "code", "execution_count": 20, "id": "4eec2a4f", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_circuit_layout(circlist[0], physical_backend)" ] }, { "cell_type": "code", "execution_count": 21, "id": "76ff07b7", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_circuit_layout(circlist[3], physical_backend)" ] }, { "cell_type": "markdown", "id": "72745085", "metadata": {}, "source": [ "#### Comparing results" ] }, { "cell_type": "markdown", "id": "a8afe6f1", "metadata": {}, "source": [ "
\n", "\n", "**Run the following cells only at the end of the class.**\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 22, "id": "92736850", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Accordion(children=(VBox(layout=Layout(max_width='710px', min_width='710px')),), layout=Layout(max_height='500…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " const isLab = window['Jupyter'] === undefined;\n", " const notebook = document.querySelector( isLab ? 'div.jp-Notebook' : '#site');\n", " const jobWidget = document.querySelector('div.job_widget');\n", " notebook.prepend(jobWidget);\n", " jobWidget.style.zIndex = '999';\n", " jobWidget.style.position = isLab ? 'sticky' : 'fixed';\n", " jobWidget.style.boxShadow = '5px 5px 5px -3px black';\n", " jobWidget.style.opacity = '0.95';\n", " if (isLab) {\n", " jobWidget.style.top = '0';\n", " jobWidget.style.left = '0';\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Execute the DJ algorithm on physical backend\n", "\n", "# Enable job monitoring\n", "%qiskit_job_watcher\n", "\n", "# To disable: %qiskit_disable_job_watcher\n", "#\n", "#job_ha_real = execute(circlist[1], physical_backend, shots=shots)" ] }, { "cell_type": "code", "execution_count": 26, "id": "d319f142", "metadata": {}, "outputs": [], "source": [ "%qiskit_disable_job_watcher" ] }, { "cell_type": "code", "execution_count": null, "id": "ca8e036e", "metadata": {}, "outputs": [], "source": [ "# We can save the job ID to retrieve results even after closing the notebook\n", "#job_ha_real.job_id()" ] }, { "cell_type": "code", "execution_count": 23, "id": "84d375c5", "metadata": {}, "outputs": [], "source": [ "# This can be achieved using the retrieve_job('ID') method\n", "#job_ha_real = physical_backend.retrieve_job('ID')\n", "job_ha_real = physical_backend.retrieve_job('63408d24d41d5e27ccd30d1b')" ] }, { "cell_type": "code", "execution_count": 24, "id": "b0909b9f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can also check the job status\n", "job_ha_real.status()\n" ] }, { "cell_type": "code", "execution_count": 25, "id": "6ae0bc24", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAFDCAYAAAA6ZgQuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAABBZUlEQVR4nO3deXxU9dn//9eVkAUMYZUAYd+igAYwFNEI1KUoWve6FbkpKhWt1vpzvd0t1q16u9etKmqta90QdyURRCxgUaAFlKWy75tkgeT6/XEm+YaQhIQkM5nM+/l4zIPMOZ9z5jpnwuSaz2rujoiIiEgsiIt0ACIiIiLhosRHREREYoYSHxEREYkZSnxEREQkZijxERERkZihxEdERERiRpNIBxBJbdu29W7dukU6DBERaUBmz569wd0PLPM8sUmTJk8B2UB85CKTaigCpu3evfuiww47rLCiAjGd+HTr1o1Zs2ZFOgwREWlAzGx52edxcXETUlNTj+zateuWuLg4TX7XgBUXF9vy5cuzt2zZMgF4sKIyauoSERGpQnx8/G86duz4k5Kehi8uLs47duy4Iz4+fmylZcIYj4iISNRx9xaJiYm7Ih2HVE9iYuIud29R2X4lPiIiIlUzM4t0DFJNofeq0vxGiY+IiIgwefLk5mlpaYdWt/zPfvazjPvvv79tbV+3V69e/SZPnty8tueprpju3CwiIiKR9f33388P5+sp8REREamhix7gsPo8/1NXMLumx+zatYuEhIT6CKdRUVOXiIhIlEpPTz/khhtuaN+nT5++BxxwwKBdu3bx6aefHjBw4MCDmjdvPiAjI6Nv2WakBx98sE2PHj36HXDAAQM7dep0yL333lvtpqo333wztXv37v2aN28+YMyYMV3c9xzk9sADD7Tp0aNHv9TU1AHZ2dm9Fy1alAjw61//usv48eM7lS17zDHH9Lz11lvTSq7hrbfeag6we/durrvuuvadO3fuf8ABBwzs16/fwd9//30CwDfffJN8xBFH9G7RosWAbt269X/66adb7c89U+IjIiISxd54443WU6ZMWbxp06ZvVqxYkXDGGWf0vu6661Zv2bLlX3fdddeK0aNH91y1alUTgLS0tN3vvvvu99u3b//miSeeWHrzzTd3njZtWrN9vcbq1aubjB49uufNN9+8asOGDXN79uyZ/80336SU7H/xxRdb3n///R1ef/31HzZu3PivI444YsfZZ5/dA2D06NGb3nnnndbFxcUArF+/Pn769Oktxo4du6n869x2221p//jHP1pPnjx58fbt2795+umnl6WkpBRv27Yt7oQTTuhz9tlnb9qwYcO//va3v/1w9dVXd5k9e3ZyTe+XEh8REZEodvHFF6/t1avXrpSUFH/66afbjBgxYuvZZ5+9NT4+ntNOO21b//79f3rjjTdaAJxzzjlb+/XrVxAXF8eJJ56448gjj9z2+eefp+zrNd54440WvXr1yvvNb36zOSkpyW+66aZ1bdq0KR3i/+STTx74hz/8Yc2gQYPyExISuPPOO1f/5z//abpo0aLEkSNH7jAz//DDD1MAnn/++VYDBgzY0a1bt72mCHjhhRcOvPnmm1dlZmYWxMXFMXTo0Lz27dsXvfLKKy3S09MLfv/7329MSEjgyCOPzDvhhBO2vPTSSzWu9VHiIyIiEsW6du1amkAsX7488f3332/VvHnzASWP2bNnp6xevToB4NVXX03NzMw8qEWLFgOaN28+ICcnp8WGDRv22d931apVCR07dixdAiIuLo4OHTqUPl+5cmXiDTfc0LnkNVu2bDnA3W358uUJcXFxnHLKKZtffPHF1qEYWp999tl71fYArF27NiEjIyO//Pbly5cnfvvttweUva633nqr9Zo1a2rcqUmdm0VERKKYmZV2tuncuXPhaaedtvHll19eXr5cXl6e/c///E/Pxx57bNl55523JSkpyY899tie5fvqVKRDhw673nvvvcSS58XFxaxevTqxzP7Cq666avWECRMqTGjOP//8jSeddFKfRYsWrfn2228PeO+9936oqFxaWtquhQsXJg8ePHiP5Kdz5867Bg8evP3LL79cvM9g90E1PiIiIo3EBRdcsPGTTz5p+cYbb6Tu3r2bnTt32uTJk5v/8MMPCfn5+VZYWBjXrl27XQkJCf7qq6+mTp8+PbU65z3zzDO3fv/9900nTZrUcteuXdxxxx3tNm7cWFrbMn78+PX3339/h1mzZiUDbNy4Mf6ZZ54pbYY68sgj81q1arV77NixXbOzs7e1bdu2qKLXOf/889fffvvtHb/77ruk4uJiZs6c2XTNmjXxZ5111pZly5YlP/roo60LCgqsoKDAcnJyms2ZM0d9fERERGJVr169dr366qvf33XXXR3atGkzID09/dA///nPacXFxdaqVaviiRMn/nfMmDE9W7RoMeCll15qc8wxx2ytznk7dOiwe9KkST/ccsstnVq3bj1g8eLFyQMHDtxRsn/MmDFbrrjiitXnnXdej5SUlIH9+vXr9/777++xbMQZZ5yxacaMGannnntuhbVCALfccsvaU089dfPxxx/fp3nz5gMvuOCCbj/99FNcq1atit9///1Fr732Wuv27dsfmpaWlnnttdd2ys/Pr/GU2ladKq7GKisry7U6u4iIlGVms909q+T53Llzl2VmZm6IZExSM3Pnzm2bmZnZraJ9qvERERGRmKHER0RERGKGEh8RERGJGUp8REREJGYo8REREZGYocRHREREYoYSHxEREYkZSnxEREQkZijxEREBxo0bR7t27ejfv3+F+92dyy+/nF69enHooYcyZ86c0n2TJk2id+/e9O7dm0mTJpVunz17Nocccgi9evXi8ssvJ5YnjJX60atXr36TJ09uXn775MmTm6elpR1aF69hZofNmzcvqS7O1RAo8RERAcaOHcsHH3xQ6f7333+fxYsXs3jxYp588kkmTJgAwKZNm7jtttuYOXMmX3/9NbfddhubN28GYMKECTz11FOlx1V1fpH98f33388/6aSTtkc6jmii1dlFRIBhw4axbNmySve//fbbjBkzBjPj8MMPZ8uWLaxevZqpU6dy3HHH0bp1awCOO+44PvjgA0aMGMG2bds4/PDDARgzZgxvvfUWJ5xwQjguR+rZDxm3Hlaf5++58NbZ9Xn+WKYaHxGRali5ciWdO3cufd6pUydWrlxZ5fZOnTrttV2kLqWnpx/y1ltvNd+xY4edccYZ3VJTUwf07Nmz38yZM5uVLbds2bKEkSNH9mzVqlVmenr6IRMnTmxXsu/zzz9vNmDAgIOaN28+4MADDzx0zJgxXfZn8c9oocRHREQkyl1zzTUdly1blrR48eLvPvzww0Uvv/xy25J9RUVFnHjiib0OOeSQnatXr/72448/Xvj444+nvfHGG6kATZo04b777vtx06ZN/5o2bdp/pk2b1vyee+45MHJXU7+U+IiIVEN6ejo//vhj6fMVK1aQnp5e5fYVK1bstV2kPrzzzjutr7/++tVpaWlFvXr12vXb3/52bcm+nJycAzZt2tTkz3/+8+rk5GTv27dv4fnnn7/+73//e2uAo446aucxxxzzU0JCAhkZGYVjx45d/8UXX+zVYbqxUOIjIlINJ598Ms8//zzuzldffUWLFi3o0KEDI0eO5KOPPmLz5s1s3ryZjz76iJEjR9KhQwdSU1P56quvcHeef/55TjnllEhfhjRS69evT+jWrVthyfPu3buX/rxkyZLE9evXJzZv3nxAyeOhhx7qsH79+iYA3377bdLPf/7zXm3bts1MSUkZeOedd6Zv2rSp0fYBbrQXJiJSE+eeey5Tp05lw4YNdOrUidtuu41du3YBcPHFFzNq1CimTJlCr169aNasGc8++ywArVu35qabbmLw4MEA3HzzzaUdnR977DHGjh1LXl4eJ5xwgjo2S71p27btrmXLliVmZWXlAyxbtiyxZF+3bt0K09PTC5YvXz6vomN/+9vfdj3kkEN2/uMf/1jSqlWr4ttvv73d22+/3SpcsYebEh8REeDvf/97lfvNjEcffbTCfePGjWPcuHF7bc/KymLevAr/1ojUqZNPPnnT3Xff3WH48OE/bdu2Le6JJ54o7bw8YsSInw444ICiG264of3111+/Njk52b/55pvknTt3xg0fPnznjh074lNTU4tatGhR/M033yQ/88wz7dq0abMrktdTn9TUJSIiEuXuueee1Z06dSro0aPHIb/4xS/6nH322RtL9jVp0oQpU6Z8/+233zbt1q3boa1btx5w4YUXdtu8eXN86Ngf33jjjdYpKSkDL7zwwq6nnnrqpshdSf2zWJ5JNCsry2fNmhXpMEREpAExs9nunlXyfO7cucsyMzM3RDImqZm5c+e2zczM7FbRPtX4iIiISMxQ4iMiIiIxQ4mPiIiIxAwlPiIiIhIzlPiIiIhUzWN5IFC0Cb1XxZXtV+IjIiJSBTPbWlhYmBDpOKR6CgsLE8xsa2X7w5r4mNkwM3vHzFaamZvZ2Gocc4iZ5ZhZXui4m83MypU5w8wWmFlB6N/T6u0iREQkphQVFT27atWqA4qLixvtiuWNRXFxsa1atSqlqKjoucrKhHvm5hRgHvB86FElM0sFPgZygcHAQcCzwE/AfaEyQ4FXgFuAfwCnA6+Z2ZHuPrMerkFERGJIcXHxX7Zt2zbou+++ywbiIx2PVKkImFZcXPyXygpEbAJDM9sB/M7dn6uizATgbiDN3fNC224EJgCd3N3N7BWgtbsfV+a4T4D17n5uVTFoAkMRESmv/ASG0rg09D4+Q4EvSpKekA+BjkC3MmU+Knfch8AR9R6diIiIRJWGvkhpe2BFuW1ry+xbGvp3bQVl2ld0QjMbD4wH6NixI1OnTgWgR48eNG/enLlz5wLQpk0b+vXrR25uLhCsdZKdnc2cOXPYtm0bECxAuHbtWn788UcAevfuTVJSUumihO3ataNPnz5MmzYNgKSkJIYOHcqsWbPYsWMHAEOGDGHFihWsXLkSgIyMDOLj41mwYEFwke3b0717d2bMmAFA06ZNGTJkCDNnziQvL8gHhw4dytKlS1mzZg0Affv2paioiIULFwKQnp5Op06dmDkzaPlLSUkhKyuLGTNmUFBQAEB2djaLFi1i3bp1APTv35+CggIWL14MQOfOnUlLS6Okhiw1NZVBgwYxbdo0du/eDcCwYcOYP38+GzcGS8RkZmayfft2lixZAkC3bt1o3bo1c+bMAaBVq1ZkZmaSk5ODu2NmDB8+nLlz57J582YABg0axKZNm1i2bJneJ71PYX+fOv92KrXx4xMj9D5F4f8nadwaelPXR8AKdx9XZlsXYDlwhLvPMLNC4EJ3f75MmTHAU+6eVFUMauoSkar8kHFrrY7vubB2x0tkqKmrcWvoTV1rgLRy29LK7KuqzBpEREREymjoic8M4CgzSy6z7ThgFbCsTJnjyh13HPBlvUcnIiIiUSXc8/ikmNkAMxsQeu0uoeddQvvvNLNPyxzyErATeM7M+pvZ6cB1wP1lptF8EDjazK4zs4PM7Hrg58ADYbosERERiRLhrvHJAr4JPZoCt4V+vj20vwPQs6Swu28lqL3pCMwCHiWYv+f+MmW+BM4BxgLfAmOAszWHj4iIiJQX1lFd7j4VqHTmS3cfW8G274Bh+zjv68DrtQxPREREGrmG3sdHREREpM4o8REREZGYocRHREREYoYSHxEREYkZSnxEREQkZijxERERkZihxEdERERihhIfERERiRlKfERERCRmKPERERGRmKHER0RERGKGEh8RERGJGUp8REREJGYo8REREZGYocRHREREYoYSHxEREYkZSnxEREQkZijxERERkZihxEdERERihhIfERERiRlKfERERCRmKPERERGRmKHER0RERGKGEh8RERGJGUp8REREJGYo8REREZGYocRHREREYoYSHxEREYkZSnxEREQkZijxERERkZihxEdERERihhIfERERiRlKfERERCRmKPERERGRmKHER0RERGKGEh8RERGJGUp8REREJGYo8REREZGYocRHREREYoYSHxEREYkZSnxEREQkZijxEZFGY+LEiSQmJpKQkMDxxx+/1/5BgwbRtGlTmjZtSmJiImZWuq9t27aYGWlpaXsc8/XOZRy6+E8ctOiPHLXk/9hRXFjv1yEi9UeJj4g0CoWFhdx222189NFHbN68mZycHN555509ysyZM4e8vDzy8vI4+eST6d27d+m+a6+9lhtvvHGv81655k3OTB3If/rcxAFxidyw5p29yohI9FDiIyKNwnPPPUeLFi0YMWIEKSkpDBs2jEcffbTS8h9++CHjxo0rfX711VfTpk2bPcoUFxezdvc2rjnwOADGtjyc6TuX1M8FiEhY1CjxMbM4M4sr87y9mV1oZkfWfWgiItW3cOHCPRKX7t27s3r16grLTp8+nZ07d3LllVdWec5luzcRTxzJcU0AyEhKY6erqUskmtW0xuc94DIAM0sBZgH3AlPNbEwdxyYiUi8mTpxIv379SExMjHQoIhJmNU18soDPQj+fDmwD2gEXAVdV5wRmdomZLTWzfDObbWZHVVH2OTPzCh4/lSkzopIyB9Xw2kQkimVkZLBx48bS50uXLqVDhw4Vls3JyeHSSy/d5zm7NWlNEcXkF+8GYGHBWpqZkiWRaFbTxCcF2BL6+RfAm+6+iyAZ6rmvg83sbOBB4E/AQOBL4H0z61LJIb8HOpR7LAFeraBsv3LlFlfrikSkURgzZgxbt24lNzeXHTt2kJubyyWXXLJXuSlTplBYWMhFF120z3PGxcXRLr4596z/GIDntnzFEc161HnsIhI+NU18/gscaWYHACOBj0PbWwM7q3H8lcBz7v6Uu//b3S8DVgMTKirs7lvdfU3JgyC56gE8VUHxdWXLuntRDa9NRKJYcnIyN954I8ceeyytWrUiOzubU045hWHDhnHDDTeUlrvnnnvIysoiLm7Pj78WLVpw5ZVXsm7dOuLj47njjjsAuK/96by27RsOWvRHthcVcEfaSWG9LhGpW+bu1S9s9lvgEWAHsBwY5O7FZnY5cKq7H13FsYkEydG57v5ame2PAv3dfXg1Xv85IMvd+5fZNgL4PBRPErAAmOjun+/rfFlZWT5r1qx9FRORGPVDxq21Or7nwtodL5FhZrPd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L32emprK999/T15eHps2bWL27Nk8/fTTYbkeiQ1KfKRBq80H6y9/+Us2b95MXl4eM2bM4N577yU/P58333yTKVOmsGLFCrZs2UJOTk7pcP26kpGRwcaNG0ufVzVvErDHvEmpqan07t0bgNGjR5OSksJnn33GW2+9xfr162nSpAnDhw+noKCAli1b1mncIjVR2ybd66+/ng4dOtCrV6/S8nFxcbRv3x4IFkguLi7GzMJzQRITlPhIg1abD9a2bduWdgLetm1bafkvvviCLl26lO4fOHAg9913X53GXZt5k/79739TWFgIwNSpU9m+fTtHHnkkf//73ykqKmL37t3k5OSQlJTEli1b6jTuEvVRy9anTx/i4uLUMbsC+3u/77rrLpo1a0ZycjLNmjUr/T1etWrVHu9DXFxcabNqXarNUjhr1qzhkUce4d13393rvIWFhTRt2pQDDzyQQw45hAsuuKDOY5fYpcRHGrTafLAC/PWvfyU5OZnhw4dz9dVXk5yczNFHH82yZctYvHgxGzZs4Ouvv2bFihV1GnfZeZNatWpFdnZ26bxJN9xwAwBPPvkk27ZtIyEhgWeeeYYXXngBgGeeeYbU1FSaNm3KqFGj+N///d+wLv5aH7VsAJdddlnpNcr/U5v73bVrV6ZNm0Z+fj5/+9vfuOaaawDo2LFj6ajAvLw8kpOTGTduXNivrSonnXQSF154YWntTlmJiYnk5eWxbNkyFi1axJtvvhmBCKWxUuIjjdoFF1xAfn4+7777Lo8++ihbtmzhpJNO4rzzziMzM5OePXvSpUsX4uPj6/y1b7nlFgoLC9m1axcff/wxALm5udxxxx0AtGzZkhUrVrBr1y527NjBiBEjAEqThby8PHbu3Mkf//jHvc6dnZ1db3P41EctGwSJT9euXesl5mhWm/t97rnnMmjQIABOOeUU3H2v+/7hhx9SWFjIpZdeWuex16ZJd/HixTz88MM0adKEnJwcpkyZwq9+9as9ju3atSsDBw7kr3/9a53HLrFLiY80aLX5YC3rpJNOIiEhofSb9HPPPcfOnTvZunUrLVq0ICMjo56vJHrURy2bVK6297vE1VdfTcuWLUlNTd1j+913382AAQOIi6v7j/vaNOlu3bqV3bt3s3v3boYPH86oUaN47bXX+Pe//83y5csBSjs3lyR3InVBiY80aLX5YM3NzS2tFZk+fTrbtm1jyJAhAMyfPx8IhtLOnj1bI6XqUEW1bFK/3n77bR566CFef/31vfZNnz69tLaortWmSbcy8+fP5+CDD6Zp06Z07NiRww47jNtvv71e4pfYpHl8aqg2c1aMHDmSzz77DDPjlltuKf1gOPXUU0vPk5aWxty5czVaJ6Q2a4y99NJL/OIXv8DMMDOuueaa0pqdI444gvz8fOLi4pg4cWLYmmBqM3dSuOZNysjIYNKkSaXPq6plGzx4cLVq2caMGROW2KNRbe/3P//5T371q1/x0EMPcfTRR+9x3Kuvvoq7M3r06HqL/5ZbbuGWW27ZY1tubm7pzyVNulWZOnVq6c9nnnlm6VqAIvVBNT41UJtOiO+88w65ubls3LiRTz75hFtvvZXCwkJmzZrFe++9x6pVq8jPz6e4uJirrroqEpfXYO1vX5nHH398j74yd955Z+k5t27dSkFBAXl5eVx99dVhv6aGrL5q2aRitbnfy5cvZ9iwYVxxxRVMmDBhr3Pff//9DB06NByXIRI1lPjUQG06IT766KMMGzaM1NRUhg0bRosWLXjuuecAcHc2b95Mfn4+hYWFpSN4PvjgAzIyMujVqxd33XVXOC+1VhR3+NVl7LVpvnjppZdo2bIlTZs25bjjjtujlq1r166l8w/Fx8czduzYqL7ndaU297ukWfHhhx8uHbpe0owLMHv27D2mFID6/z2/6IHaPSqj3xWpK2rqqoHaLEOwevVqjjzyyNJyrVu3ZuHChYwfP56TTz6ZXr16YWZ06dKF66+/nqKiIi699FI+/vhjOnXqxODBgzn55JPp27dveC52P4Ur7rpuMorW+w31E/v+Nl88/vjjPP744xWes6TDatm4+/TpE5X3vK7t7/3+5JNPqjzvrl279ngerb/n0Rq3NEyq8YmwpUuX8vnnn7NgwQJ27NhBQUEBEyZM4Ouvv6ZXr1706NGDxMREzjnnHN5+++1Ih7tPijv8ojX2aI07mkXrPY/WuKVhUo1PDdSmE2KHDh1YsmRJablNmzaRkZHBww8/zIEHHsjBBx8MBBPAffHFFxxzzDF07ty5tHynTp2YOXNmPV9h7a1cuVJxh1k4Yq+PBW2j+Z5Hq2i959EatzRMSnxqYMyYMVx66aXk5uYyaNAgcnNzefnll/coU9IJcfz48Xt0Qrzkkks455xz2LZtG//617/YunUrY8eO5YUXXuCxxx5jw4YNtG7dmk8//bReppYXkegSDSMARaJR2Ju6zOwSM1tqZvlmNtvMjtpH+eGhcvlmtsTMLq7tOfdXbTohnnLKKWRnZ9OmTRuOPfZYbrrpJhITE7ngggsYMmQI6enpNGvWDHfnmWeeIT09nR9//LH0tVesWLHHCsYNleIOv2iNPVrjjmbRes+jNW5pmMJa42NmZwMPApcA00L/vm9mfd39vxWU7w5MAZ4BRgPZwGNmtt7d39ifc9ZWbeasKBmKXV5OTs5e2wYPHszixYtZunQp6enpvPzyy7z00ku1iDw8FHf4RWvs0Rp3NIvWex6tcUvDFO6mriuB59z9qdDzy8zseGACcH0F5S8GVrn7ZaHn/zazIcBVwBv7ec6o0KRJEx555BFGjhxJUVER48aNo1+/fpEOa58Ud/hFa+zRGnc0i9Z7Hq1xS8MUtsTHzBKBw4A/l9v1EXBEJYcNDe0v60Pgf8wsAbD9OGedq4+OnwCjRo1i1KhRtTt5BCju8IvW2KM17mgWrfc8WuOWhiecfXzaAvHA2nLb1wLtKzmmfSXlm4TOtz/nFBERkRhl7h6eFzLrCKwEhrt7bpntNwO/dve9lsc2s0XAi+5+e5ltw4AcoCNBjU9NzzkeGB96mgEsrIPLq622wIZIB7EfFHd4RWvcEL2xK+7wawixd3X3AyMcg9STcPbx2QAUAWnltqcBayo5Zk0l5XeHzmc1Pae7Pwk8We2ow8DMZrl7VqTjqCnFHV7RGjdEb+yKO/yiOXaJDmFr6nL3QmA2cFy5XccBX+59BAAzKik/y9137ec5RUREJEaFe1TX/cALZvY1MJ1g1FZH4HEAM3sewN3HhMo/DvzOzB4AngCOBMYC51b3nCIiIiIlwpr4uPsrZtYGuBHoAMwDRrl7yeqFXcqVX2pmo4D/Ixievgq4vGQOn2qeMxo0qKa3GlDc4RWtcUP0xq64wy+aY5coELbOzSIiIiKRptXZRUREJGYo8REREZGYocSnATAzi3QMIiIisUCJTwPg6mgVNkoyRURimzo3R4iZJQGHAqcBW4H5wPfAj+7+k5mZEqL6o/sbXmYW5+7FkY4jVpS93/pdF9mTEp8IMbOHgNOB1UAroBvBcP23gAfcfUnEgqsGM4snqKyKij9mZpYCDAPOATYDi4FFwDx3XxXJ2KrLzJoAxdFyzyWyzKy5u2+PdBwiDY0Snwgws77AV8CZwGx332hmBwIXAL8lWGD198BTDe2bmpkd5u6zy22LJ/iD3KBiLcvMJhEkPosJEs3OBAnQvwju82eRi65qZpbt7tPKbYuKJMjMOgPjgMHADwRr480HvnX3zQ2xNqJsTNFyn0uY2cHAlcBAghrk/wJzgVx3/zFUpsHdc5FwUuITAWb2v8Dx7j4s9LyJu+8us/9PBLVBRzek2ggz603wh2sB8BHwgrt/U2a/EUyKORD4V2hJkYgLJZozCZYy+ae7F5lZC+As4EIgC7gdmEgDS+DM7CCC+/0T8B7wsLtPL7PfgARgJPC1u6+NSKAVMLPuwBtAU+CfQH+CdfQ2Al8A97v7D5GLsGKhLyEHl1v42IB4oKgh/X6UZWY9gSnAWoJZ7A8i+BKVRJAEPe3uH0UuwoqZWRrB/80p7r6pinIJ7r4rfJFJY6XOzZHxb6CDmfUCcPfdZtbEzJJD+58CdhLUCDUk5xJ8a/8YOByYbGZfmdk1ZtY59AehHUFtVrsIxlneL4C57v5VKOlJdPet7v6Uuw8BLiVIgHo2wD9qpxN8Y/8TkA7kmNkaM/uzmZXE2xJ4G0iMXJgVuhZYCfzc3ce4+yBgKPA34CTgKzM7JZIBVuJWYGroPj9qZn09sNvd3czizKyLmf0qVNvZUFxF0Hx7ortf7+6nAacCDxEkQG+a2QURjK8yNwLPA9+b2WtmNirUB7KUmXUBfl9+u8j+UOITGbkEK8xPNrOzzCwp9KGaD8FSHQTfLgsiGWQFMgi+Ud4NXAT8L8ESIaOBGWb2LsGaav929xURi3Jvc4GuZnYMBAvmhhLNpqH9rwHL2XMNuIYineDb+xPAKcDRwDPAicBiM/sWeJngnv8YsSgr1g/Icfc1ZpYQqtn8r7vf7e5dgU+Ai0OJREMabTeYYK2/vwDZwDwz+97M/tfMWoeavf4HuNvdiyIZaDldgTnuvt3M4s0s3t3Xuvtzodrlx4GLzKxZhOMsL4vgM+X/I2iGfhNYamYPm9mgUJmLgIvdvaF9JkoUUuITAe6+ETiG4A/yrcC7ZjbRzI42sz5m9iDBQqsvRjDMPYT6OrwHrHH3Ne4+390nAdcQ9Eu6C8gDRhEsHNuQzAD+A7xoZhebWdNQopkHpe9HCrAhkkGWF6pNeA9Y4O6bQo9cgt+ZkcDJBE14I4A/RyrOKnwKjA51st0VqtlMKJNwPgr0AX7WUGrazKwrQd+vr4E/Evw+nwB8SLAA8gYzmw78AXg4UnFW4kPgN2Z2kLsXldRumllJTeBfCZoah0QuxD2ZWUdgBbDU3Z8FjgcygQeBo4B/mtl3BP2WGtr9liilPj4RFFpc9SSC9u0eBDUqrYAc4Al3fzmC4VWpovZ2MzsdeB1IcfedkYmsYqE/tncQNB/mETTHvQ3sAH5D8M0+o6HFXVZFQ8LNbCTwPg3znh8GvAusAW5193fK7T+IoHN564YSu5mlEkwxsczdc8psb0rwZeQw4BKC35fmJclzQxDqU/UPgqbPP7r7M+X29wfmAC0b0P0+gKAWc527zyy3rxlBv7CrCJp8G9T9luilxCfMzKwT0Cv09CeCjqt5BIlPCkHfng1VdfKLhMrmYQnVBBWF+j78Gchy9xFhD7AKoSr/otCQ9myCb5KHA4MImhQ/IRjZ9X4Ew9xLqPnHqhpRZGa3AkPdfWTYAquGkpFDoX5s9xDc75JOze8DfQmS0KXuflbkIq1cSYfmsgMPQtv/BqQ3tN9zCIawA3cCvybo9P4Rwe93f4Lf/X+5+5jIRVi1ikacmdlzBP3vjopMVNLYKPEJIzObQDC0N5MgwVlCUM37OfB6A+yjUapMwmZAMbDQ3deU2W8EfVBWuvs/IxNl9YSq/g8kSDiTga3u/lNko9o/ZjYCWO/u8yMcSqVCnfaPJajZ/BlB359NBJ34X3T35REMb5/KjugiGKGWC9zp7m9ENLAyQjHGhRL8ZOAQgukbjiZI8JcSNJ3/o+z/20gzsziC+cAq/EMUqml7G/iLu78Z1uCk0VLiEyahZq3vgfsIOk0eSPDHYATBt99VwOXuvqCibz2RVC5h+4ngOlYQNBe95e4LIxhepUJ9efLKPK/yQ7YhKR97NAnd51MIfsebEowE/MLdt4b+KDtBs0VD61NVNu5mBCPSctx9XZkyScCx7v5eZKKsPiszv5aZtXD3rZGOqabMLIGgFnlGpGORxkOJT5iY2WXA6NDw6fL7sgmqp9MJOno2mD8I+0jYDiZIgP4QStjiG8ooFzNrRdB5/D2Cb7pfliQ8ZRMgCyZ8W+ENaIbbfcRednK9g4HV7r4lUrGWF2pq+Svwc4KawZUEtYQ7CZpcXnT3xaGyDWYZiwriXkGQoOUT9Ll7wd3/E7kIKxZKDLoDyysa8dTQvkSV2FfcIvVJo7rCpxBoHupgiJkllYy28GBW3l8TfMj+InIhVug8YJG7T3T3je7+H3d/xN3PJBjN1YxgWH7bhpL0hIwmGMFyGEHTxPdmdruZZbh7ybfgzsBLBMlcQ1JV7CVJT0nsrSMXZoUuJ+ikP8rd0wh+f+4DviXoyH+/BRME0lCSnpDycf8aeAD4juD/5D0lcTcwlwLfAI+b2S/NrL2VmVso9HueamYnhJKNhqLKuCHoaG5mJ5YZlSZSJ1TjEyahmpMcguahP5TUMNieiwl+SdB0dE/kIt2Tmf2WYPmMs9x9Xqiq3z00K7MFE4t9AEx095ciGOoezOwpgj4ZNxNM3nYuQWfaHgSzCD8DtAFucPeUSMVZkSiP/QvgTXe/v9z2eOBIglqVH9z9+EjEV5kojnsGwRemJsARBEtUvEkwuuu7UPPixcBYdz88cpHuKVrjlsZBNT5hEOp4uIlghtLjgFVm9tfQcF8smAV2NEGHxFcjF2mFXieo+r/CgvlYCjyYADAOwN3/C2wBOkUwxj2EkrMFBCvdr3P3b939eoKJ0kaG9t1KMLz97ogFWoEoj70JwYSWZ5TUjlgwkV6cB/PK5BLMhdPJzDIjGWtZURz3gcAughGJRxFMYPhXgpq1XOAzM7sWuIJgvqcGIVrjlsZDNT5hZGYtgS4E33BOI/gmCcE8J0bQj+DWiARXgVDCBkGHzwcJmlVeBR4jqKbuRDBy5C/AIe6+LAJhViiUQLTyYNbgvVaSD42G+gzo4g1rluloj/1wgiUpXidYi2ttuf2dCZZsyXD3lREIsULRGLeZdQDOIZjg8sNy+wYSLMNyDqFFeRW3SECJTz0zs3bA+QTTsW8gGEK9BZhG0OyVQDBM/AN3XxShMKsUjQlbqG9DD+Cnsn/Eyuy7maAavUfkIt1blMceR1CL/BuCtcWaECxS+gpBU8ahBN/q+7r74EjFWV60xg2lw73d3fPLfFGhTF+wOwj6LQ2MVIwVida4pXFQ4lPPLJh8qx/BDLabCGpNDiGYqn8dcKOXm7G0IYjWhK1M3FcS3N/dwGqC9bj+4e4/hT5oLwJWufvkiAVbTjTHXl4oWR5L0Ll5ALCdoE/HPwnmwGlwv/MQnXFXNnLLgpmP5wDPunuDahaF6I1bop8Sn3oU+iO1neCbS26ZbV0I1su5kKDD6lnuPidigVYgihO259g77oHAQQRDlO91948iFmAVojz2VGB72T9koZqUZIIZyfsT1GA1qN+ZxhR3BWWSgbOBv5cMRoi0aI1bGhclPvXIzPoRrJx9kbt/VcH+JIKVtz8OdWBtEKI1Yasi7k4ESyZcRNCR8tyGFDdEd+wAZvYEwcKeXxPMzbKtgjKt3H1zZd/0I6GRx93SG9AcTxC9cUvjolFd9WsJQe3I/5lZ75KRUCU8mLhrEsHqzw1JX4Ip7ku/bXlgubu/CvySoNnrV5EJr1KVxf2ju79G0E9jOw0vboji2M3sXILE7D6C5QXuNbPTzaxXqC8HFqyT9qyZHdKAkofGFPdpZtazTNxNgUkWmjesIYjWuKXxUY1PPQuNFnmcoI/ME8CnwGZ33xFqy34eyHf30REMcw+hD5/JBJMTjiGYv6T8quCXARe4+4DwR1ixaI0boj72knmH7iFYRft/gJ7AQmAKwe98BvCguzeYyegUd3hFa9zS+CjxCYPQt5ebgJMJ1rqaAawnWPphNXChu38XuQj3Fo0JG0Rv3BCdsVswB841QKq7X1dmez+Cb/dnEvSXaQlMcvcLIhFneYo7vKI1bmmclPiEUWjUzonAqQQjReYBr3kDXAMIojNhg+iNG6IzdgvWFktz9/9YsLzArnKdhc8G/g4Mcvd/RSjMvSju8IrWuKXxUeITIdaAFmjcl2hL2EpEa9wQ3bFD6cgoc/ciM7uIoPmiWaTj2hfFHV7RGrdENyU+UiPRlLCVFa1xQ3THDmBmVwLx7n5vpGOpCcUdXtEat0QfJT4iUq8sWBW8KNqSN8UdXtEat0QfJT4iIiISMzSPj4iIiMQMJT4iIiISM5T4iIiISMxQ4iMiIiIxQ4mPiIiIxAwlPiIiIhIz/n+J45QQdfWlIAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result_ha_real = job_ha_real.result()\n", "counts_ha_real = result_ha_real.get_counts(half_adder)\n", "\n", "plot_histogram([counts_ha_real, counts_half_adder_sim], legend=[ 'real device', 'ideal'])" ] }, { "cell_type": "markdown", "id": "15b045c4", "metadata": {}, "source": [ "# 2. Superdense Coding " ] }, { "cell_type": "markdown", "id": "ae4dc79f", "metadata": {}, "source": [ "In 1970, Charles H. Bennett and Stephen Wiesner proposed the Superdense Coding protocol for the first time. This protocol is thought of as the opposite of quantum teleportation, which transmits one qubit using two classical bits. Superdense coding transmits two classical bits using one qubit. \n", "\n", "![process](https://qiskit.org/textbook/ch-algorithms/images/superdense.jpg)\n", "\n", "1. As illustrated above, the protocol starts with a third party (Charlie) preparing the entanglement between two quantum states. \n", "\n", "2. The two qubits are then sent to the sender (Alice) and the receiver (Bob):\n", "$$|\\psi\\rangle_{AB} = \\frac{1}{\\sqrt{2}}(|0\\rangle_A \\otimes |0\\rangle_B + |1\\rangle_A \\otimes |1\\rangle_B)$$\n", "The first qubit, denoted by subscript $A$, belongs to Alice, and the second qubit, $B$, belongs to Bob.\n", "\n", "3. The following step is encoding. Alice needs to apply a set of quantum gates to her qubit depending on the 2 bits of classical information she wants to send. \n", "\n", "|Intended Message| Applied Gate| Resulting State ($\\times \\frac{1}{\\sqrt{2}}$)|\n", "|--|--|--|\n", "|00|I| $|00\\rangle+ |11\\rangle$\n", "|01|X| $|10\\rangle+ |01\\rangle$\n", "|10|Z| $|00\\rangle- |11\\rangle$\n", "|11|ZX|$-|10\\rangle+ |01\\rangle$\n", "\n", "4. When Bob receives Alice's qubit, he only has to apply the restoration operation. \n", "\n", "|Bob Receives ($\\times \\frac{1}{\\sqrt{2}}$)| After the CNOT-gate ($\\times \\frac{1}{\\sqrt{2}}$)| After H-gate|\n", "|--|--|--|\n", "|$|00\\rangle+ |11\\rangle$| $|00\\rangle+ |10\\rangle$ | $|00\\rangle$|\n", "|$|10\\rangle+ |01\\rangle$| $|11\\rangle+ |01\\rangle$ | $|01\\rangle$|\n", "|$|00\\rangle- |11\\rangle$| $|00\\rangle- |10\\rangle$ | $|10\\rangle$|\n", "|$-|10\\rangle+ |01\\rangle$|$-|11\\rangle+ |01\\rangle$| $|11\\rangle$|\n" ] }, { "cell_type": "markdown", "id": "3d48b2dc", "metadata": {}, "source": [ "
\n", "\n", "**Implementing the superdense coding protocol**\n", "\n", " \n", "\n", "Implement the superdense coding admitting that Alice wants to send the bits $11$\n", "\n", " \n", "\n", "\n", "The protocol can be broken down into several steps:\n", "\n", "- Entangle qubits `qa` and `qb` so that $|qa \\; qb \\rangle = |00\\rangle + |11\\rangle$. This can be achieved with a Hadamard and a CNOT gate;\n", "\n", "- Encode the message in Alice's qubit.\n", "\n", "- Decode the message.\n", "\n", "- And measure.\n", " \n", "Finally, simulate your program.\n", " \n", "
" ] }, { "cell_type": "markdown", "id": "da223bec", "metadata": {}, "source": [ "Refs: \n", "* [Qiskit superdense coding](https://qiskit.org/textbook/ch-algorithms/superdense-coding.html)\n", "* [Wiki superdense coding](https://en.wikipedia.org/wiki/Superdense_coding)" ] }, { "cell_type": "code", "execution_count": 24, "id": "8d611126", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAANgAAACoCAYAAACCAiAsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAMzElEQVR4nO3df0zV9aPH8Se/8mhQWPjNH5GbgwzOQhTbWhHqtZq1fa0W18aKuaJ0DspZG/1EZzWWxmC10tt3yFzf2WnCkDZH+1YuzlfxzgIdJenlj2yAyTcq1mR6sQvn/uE6d4QKH+HN5/3mvh6bWzt+gqerF+ecz/l4TkwkEokgIkbE+h0gMpVpYCIGaWAiBmlgIgZpYCIGaWAiBmlgIgZpYCIGaWAiBmlgIgZpYCIGaWAiBmlgIgZpYCIGaWAiBmlgIgZpYCIGaWAiBmlgIgbF+x3gspMnT456zHvvvUdJSckVj7ntttsmKmlMRut2sRns7NY9mGHvv/++3wmeudgMdnZrYCIGaWAiBmlghtXV1fmd4JmLzWBntwYmYpAGZlh+fr7fCZ652Ax2dmtgIgZpYCIGaWCGFRcX+53gmYvNYGd3jD5d5eqN5eqCsbDxqojRuNgMupJjysnLy/M7wTMXm8HObg3MsN7eXr8TPHOxGezs1sBEDNLADMvMzPQ7wTMXm8HObp3kGAdXn3jrJMfk0T2YYZs3b/Y7wTMXm8HObg3MsNraWr8TPHOxGezstm5gQ0NDVFRUkJ6eTiAQYNGiRYTDYRYuXMi6deuixzU1NfHwww+TmppKIBBg3rx5PP300/z2228+1osMZ91bBhQVFVFfX09ZWRk5OTkcPnyYgoICent7ef7556PHtbW1kZubyzPPPENSUhInTpzgtddeA6C6utqvfJFhrBpYKBRi9+7dNDU1sWzZMgBWrFjB0aNHqa+vZ8mSJdFjN27cGP3noaEh7rrrLtra2jhw4MCkd19JOBz2O8EzF5vBzm6rHiKWl5ezatWq6Lj+kJaWRkJCAllZWQAMDg6yZ88ecnNzuemmm4iLiyMhIYGdO3eSmJjoR/pltbe3+53gmYvNYGe3Nfdg3d3dHD9+nE2bNo34vc7OToLBINOmTQNg7dq11NfXU1JSwosvvkhKSgrx8fGsXLmS22+/fUzfLyYmZtzNl2r9s6qqqlGPq6qqGneLF2Ppca0ZJq/byytbVg0MYPbs2cNuP3/+POFwmAceeACA48ePs2fPHqqrqykqKooe19zczNmzZ8nJyZm8aJFRWDOwlJQUADo6OnjwwQejt2/fvp0zZ85Eh9PZ2QkMf8Hw999/j54AGevAJuL19bG8+FlVVTXs7OelVFZWjrvFi9G6XWwGO7utGdiCBQvIysqivLycG264gXnz5lFXV0djYyPwf8NZtGgRgUCAl156ibKyMn755RcqKyvp6+sjLi6O7OxsH/8UI23dutXvBM9cbAY7u626VKqjo4P169fz1VdfceONN7J27VqSkpJ45ZVXOHv2LNOnTwdg3759lJaW0t3dTTAYpLS0lP3799Pa2jqpT3RdvXxHl0pNHqsGdimFhYW0tbXxzTff+J0ywlj+o2dkZHDixIkrHmPb/6wuNoOd3Vadpr+UlpYWnbgQZ1k9sP7+fjo6Ooa9wCziEmtOclxKYmIig4ODfmeMy/Lly/1O8MzFZrCz2/rnYDZz9Ym3TnJMHqsfIk4FGzZs8DvBMxebwc5uDcywpqYmvxM8c7EZ7OzWwEQM0sBEDNLADBvthU8budgMdnZrYIbt3bvX7wTPXGwGO7s1MMO2bNnid4JnLjaDnd0amIhBGpiIQRqYYTt27PA7wTMXm8HObg3MsGAw6HeCZy42g53dGphhf36HLBe42Ax2dmtgIgZpYIbdcccdfid45mIz2NmtgRn29ddf+53gmYvNYGe3BiZikAYmYpAGZlhdXZ3fCZ652Ax2dmtgIgZpYIbl5+f7neCZi81gZ7cGJmKQBiZikAZmWHFxsd8JnrnYDHZ2630Rx8HV9+rT+yJOHt2DGZaXl+d3gmcuNoOd3RqYYb29vX4neOZiM9jZrYGJGKSBGZaZmel3gmcuNoOd3TrJMQ6uPvHWSY7Jo3swwzZv3ux3gmcuNoOd3c4O7McffyQmJoZQKOR3yhXV1tb6neCZi81gZ7ezA2ttbQXs/FusIn9wemAzZ84kLS3N7xSRy7JuYENDQ1RUVJCenk4gEGDRokWEw2EWLlzIunXrose1tLSwdOlSPvroI7Kzs5kxYwbZ2dl88cUXPtaPFA6H/U7wzMVmsLPbuoEVFRXxxhtvsH79ej799FPWrFlDQUEB33//PTk5OdHjWltbaW9vZ9euXWzdupWPP/4YgIceeoiuri6/8kdob2/3O8EzF5vBzm6rPgQ9FAqxe/dumpqaou9xt2LFCo4ePUp9fT1LliwBLp7g6Onp4Z577uGzzz4jLi4OgLS0NILBIPv37x/140RjYmLG3btp06ZRj6mqqhr1uKqqqnG3eDGWHteaYfK6vbyyZdU9WHl5OatWrRrxBpJpaWkkJCSQlZUFXHx4CPDmm29GxwUXX2iMj4/np59+mrxokSuw5oXm7u5uUlNT2bVrF0899dSw3ysoKODkyZMcO3YMuPgxNR988AE9PT3Djvv555+ZNWsW1dXVFBUVGW8ey4ufGRkZo34wnG0v2rrYDHZ2W3MP1t3dDcDs2bOH3X7+/HnC4XD04SFcfP41d+7cEV8jFAoRGxvL/fffbzbWg61bt/qd4JmLzWBntzUDS0lJAaCjo2PY7du3b+fMmTMjTnD88MMPDAwMRG/r6+vjrbfe4oknniA1NXVyosdgzZo1fid45mIz2NltzcAWLFhAVlYW5eXlfPjhhxw4cIANGzZQU1MDEB3Y6dOn6enpITk5mccff5zPP/+cUChEbm4uSUlJvPPOO37+MUbIyMjwO8EzF5vBzm5rBhYbG0ttbS3BYJANGzbw5JNPkpKSQnFxMXFxcdETHH9cwbFv3z7i4+N55JFHeO6558jNzeXQoUMkJyf7+KcQGc6q0/S33norX3755bDbCgsLyczMZPr06QCsXr06epr0j9e+RGxlzT3Y5bS0tAx7/uWa5cuX+53gmYvNYGe31QPr7++no6Nj2BlE1+zcudPvBM9cbAY7u60eWGJiIoODgzz77LN+p1y10a4osZGLzWBnt9UDmwqampr8TvDMxWaws1sDEzFIAxMxSAMzbLRr42zkYjPY2a2BGbZ3716/EzxzsRns7NbADNuyZYvfCZ652Ax2dmtgIgZpYCIGaWCG7dixw+8Ez1xsBju7NTDDgsGg3wmeudgMdnZrYIb9+f1FXOBiM9jZrYGJGKSBiRhk1V+4dM1Y3qFoy5Ytk/5ORqMZrcfFZrCz25q3bROZivQQUcQgDUzEIA1MxCANTMQgDUzEIA1MxCANTMQgDewSurq6WLlyJRkZGQSDQV5++WW/k8RRGtglxMfHs23bNk6cOMGxY8c4dOgQn3zyid9Z4iBdKnUJc+bMYc6cOQBcc801LF68mM7OTp+rxEW6BxvFr7/+SkNDA/fdd5/fKeIgDewKLly4QH5+Phs3brTuIlJxgy72vYzBwUEee+wxbrnlFiorK/3OEUdpYJdRVFTE0NAQNTU1xMTE+J0jjnLyIeLx48dZv349S5cuZdq0acTExNDf3z9hX7+5uZmamhpaWlpYvHgx2dnZvPvuuwDo55F44eRZxNbWVhobG8nJySEQCNDc3DyhX//uu+++7JDCR9o43dPLY3/9N+Lj4ib0+8rU4+Q9WGFhIV1dXTQ0NHDvvfdO2vcdGLjAP4+0ceH3/9G4ZEysHdi3337Lo48+SkpKCoFAgPT0dF599VXg4gem++Hw0XbO/fcA997t7kfayuSy8iFia2sreXl5pKam8vbbbzN//nxOnTrF4cOHJ+x7vLTtb1f9777/94YJ6xD3vPXiujEfa+XAXnjhBa699lqOHDnC9ddfH729qKjIxyoR76wb2Llz5zh48CAlJSXDxjXRvPwUGhi4wLb/CJE69y88+e8PGGuSqce6gfX19TE0NMTNN99s9PtczUPE//q+a1wPLWVq8PLD2bqTHDNnziQ2NpbTp0/7nSIybtbdg82YMYO8vDxCoRCvv/461113nZHvM9afQl/+5zH+8c+vKS58mNS5fzHSIlOXdQMDqKioIC8vjzvvvJPS0lLmz59PZ2cnBw8epLq6mnPnztHY2AjAd999B0BDQwOBQIBZs2ZN2IcADAxc4OBX37BwQarGJVcnYqm2trbI6tWrI8nJyZFAIBBJT0+PlJWVRSKRSOTUqVMR4JK/li1bNmENP/7r58j2D0KRztP/mrCvKf+/6GLfUQwNDfn2wra4TwMTMUg/mkUM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAzSwEQM0sBEDNLARAz6XwwLXqS+jnZYAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Qubits A, B and C as separate registers\n", "qa = QuantumRegister(1, 'qa')\n", "qb = QuantumRegister(1, 'qb')\n", "\n", "# Alice needs two bits; Bob needs one\n", "c_bob = ClassicalRegister(2)\n", "\n", "# Initialize circuit\n", "sdc_circuit = QuantumCircuit(qa, qb, c_bob)\n", "\n", "# Entangle qa and qb\n", "\n", "\n", "sdc_circuit.barrier()\n", "# Encode\n", "\n", "sdc_circuit.barrier()\n", "# Decode\n", "\n", "sdc_circuit.barrier()\n", "# Measure \n", "\n", "# Draw circuit\n", "sdc_circuit.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 25, "id": "a677a195", "metadata": {}, "outputs": [], "source": [ "# Simulate\n", "\n", "# Plot histogram" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.4" } }, "nbformat": 4, "nbformat_minor": 5 }